from typing import Optional

from langchain_core.runnables import RunnableConfig
from pydantic import BaseModel
from .base import BaseNodes, tool_node
from ...models.graph import GraphState


class CompletionSchema(BaseModel):
    result: str
    command: Optional[str] = None


class CompletionNodes(BaseNodes):
    @tool_node(args_schema=CompletionSchema)
    def attempt_completion(self, state: GraphState, *, config: Optional[RunnableConfig] = None):
        """
        提交任务完成结果。确认所有工具执行成功后使用，向用户展示最终成果。
        ⚠️ 重要：仅在确认前置工具都执行成功后使用，否则将导致系统故障。
        参数:
        - result: (必填) 任务最终结果，应完整明确，无需用户进一步输入
        - command: (可选) 展示结果的CLI命令(如open index.html)，避免使用echo/cat等文本命令
        用法:
        <attempt_completion>
        <result>
        Your final result description here
        </result>
        <command>Command to demonstrate result (optional)</command>
        </attempt_completion>
        """
        pass
